// 如果我们有一个像 Promise 这样的包装类型。
// 我们如何获得一个在包装类型内部的类型？
// 例如，如果我们有Promise<ExampleType>如何获取 ExampleType？

// 答案
type MyAwaited<T extends Promise<any>> = T extends Promise<infer U>
  ? U extends Promise<any>
    ? MyAwaited<U>
    : U
  : never;
type X  = Promise<void>
type XX = MyAwaited<X>
